using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common; using MinCultura.Sipa.DataAccess.EntidadesArtes;
using SystemFrameworks;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_FORMA_PAGO.
	/// </summary>
	public class FormaPago 
	{
		#region Private Data Access Atributes

		private const String FPG_ID_PARAM = "@FPG_ID";
		private const String FPG_NOMBRE_PARAM = "@FPG_NOMBRE";

		#endregion Private Data Access Atributes

        public FormaPago(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

		/// <summary>
		/// Busca todos los registros de la entidad ART_FORMA_PAGO.
		/// </summary>
		/// <returns>Objeto DataTable con los registros encontrados.</returns>
		public FormasPagoData BuscarFormaPago()
		{
			FormasPagoData response = new FormasPagoData();

			try
			{
				SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_FORMA_PAGO", response);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_BUSCAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorBuscar", this.GetType().FullName), ex);
			}

			if (response.Rows.Count == 0)
			{
				return null;
			}

			return response;
		}

		/// <summary>
		/// Consulta regsitros de la entidad ART_FORMA_PAGO, 
		/// recibiendo como parametro (PK ART_FORMA_PAGO). 
		/// </summary>
		/// <param name="parFPG_ID">PK de la entidad ART_FORMA_PAGO.</param>
		/// <returns>DataTable con los registros encontrados.</returns>
		public FormasPagoData ConsultarFormaPago(decimal parFPG_ID)
		{
			FormasPagoData response = new FormasPagoData();
			SqlParameter param1 = new SqlParameter(FPG_ID_PARAM, parFPG_ID);

			SqlParameter[] parameters = {param1};

			try
			{
				SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_FORMA_PAGO", response, parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_CONSULTAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", this.GetType().FullName), ex);
			}

			if (response.Rows.Count == 0)
			{
				return null;
			}
			return response;
		}

		/// <summary>
		/// Adiciona un grupo de registros en la entidad ART_FORMA_PAGO,
		/// Recibiendo como parametro de entrada (objeto DataTable)
		/// </summary>
		/// <param name="datos">DataTable con los registros a insertar.</param>
		/// <returns>PK del registro(s) insertados.</returns>
		public byte AdicionarFormaPago(FormasPagoData datos)
		{
			byte bytFPG_ID = 0;

			try
			{
                //StartTransaction();

				if (datos != null)
				{
					foreach (DataRow row in datos.Rows)
					{
						SqlParameter param1 = new SqlParameter(FPG_ID_PARAM, SqlDbType.Decimal);
						param1.Direction = ParameterDirection.Output;
						SqlParameter param2 = new SqlParameter(FPG_NOMBRE_PARAM, row[FormasPagoData.FPG_NOMBRE_FIELD]);
						SqlParameter[] parameters = {param1, param2};
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_FORMA_PAGO", parameters);

						bytFPG_ID = byte.Parse(param1.Value.ToString());
					}

                    //if (this.RegistroAuditoria!=null)
                    //{
                    //    this.RegistroAuditoria.Rows[0][RegistroAuditoriaData.REG_IDENTIFICADOR_FIELD] = bytFPG_ID;
                    //}

                    //RegistrarAuditoria();
				}

                //CompleteTransaction();

				return (bytFPG_ID);
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", this.GetType().FullName), ex);
			}

		}

		/// <summary>
		/// Adiciona un grupo de registros en la entidad ART_FORMA_PAGO,
		/// Recibiendo como parametro de entrada (objeto DataTable)
		/// </summary>
		/// <param name="datos">DataTable con los registros a insertar.</param>
		public void ActualizarFormaPago(FormasPagoData datos)
		{
			FormasPagoData formasPagoDataAnt = new FormasPagoData();
			try
			{
                //StartTransaction();

                //if (this.RegistroAuditoria!=null)
                //{
                //    formasPagoDataAnt = ConsultarFormaPago(Convert.ToDecimal(datos.Rows[0][FormasPagoData.FPG_ID_FIELD]));
                //}

				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(FPG_ID_PARAM, row[FormasPagoData.FPG_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(FPG_NOMBRE_PARAM, row[FormasPagoData.FPG_NOMBRE_FIELD]);

					SqlParameter[] parameters = {param1, param2};
					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_FORMA_PAGO", parameters);
				}

                //RegistrarAuditoria(formasPagoDataAnt,datos);

                //CompleteTransaction();
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", this.GetType().FullName), ex);
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad ART_FORMA_PAGO
		/// Recibiendo como parametrio de entrada (PK ART_FORMA_PAGO)
		/// </summary>
		/// <param name="Id">PK de la entidad ART_FORMA_PAGO.</param>
		public void EliminarFormaPago(decimal parFPG_ID)
		{
			SqlParameter param1 = new SqlParameter(FPG_ID_PARAM, parFPG_ID);
			SqlParameter[] parameters = {param1};

			try
			{
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_FORMA_PAGO", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName), ex);
			}

		}

		/// <summary>
		/// Elimina un grupo de registros de la entidad ART_FORMA_PAGO,
		/// Recibe un parametros de entrada (objeto ArrayList).
		/// </summary>
		/// <param name="arrIDs">Objeto Arraylist con los registros a eliminar.</param>
		public void EliminarFormaPago(ArrayList arrIDs)
		{
			try
			{
                //StartTransaction();

				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(FPG_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};

					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_FORMA_PAGO", parameters);
				}

                //RegistrarAuditoria();

                //CompleteTransaction();
			}
			catch (SqlException sqlEx)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_FORMA_PAGO"), sqlEx);
			}
			catch (Exception ex)
			{
                //AbortTransaction();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", this.GetType().FullName), ex);
			}
		}


	}
}